package org.jivesoftware.smackx.provider;
import java.security.Provider;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smackx.packet.EncryptedMessage;
import org.jivesoftware.smackx.packet.SignedPresence;
import org.spongycastle.jce.provider.BouncyCastleProvider;
import org.xmlpull.v1.XmlPullParser;
public class EncryptedDataProvider implements PacketExtensionProvider {
private static BouncyCastleProvider bcProvider = null;
private final Map<String, String> keyStorage = Collections.synchronizedMap(new HashMap<String, String>());
private String myKey = null;
private String myKeyPw = null;
@Override
public PacketExtension parseExtension(XmlPullParser parser) throws Exception {
PacketExtension ext = null;
if (parser.getNamespace().equals("jabber:x:encrypted")) {
EncryptedMessage msg = new EncryptedMessage();
msg.setEncryptedText(parser.nextText());
ext = msg;
} else if (parser.getNamespace().equals("jabber:x:signed")) {
SignedPresence pr = new SignedPresence();
pr.setSignedStanza(parser.nextText());
ext = pr;
}
return ext;
}
public static String removeHeaderFooter(String signed) {
if (signed.indexOf(" ") < 0) {
return signed;
}
int begin = -1;
if ((begin = signed.lastIndexOf("\r\n\r\n")) < 0) {
if ((begin = signed.lastIndexOf("\n\n")) < 0) {
return signed;
} else {
begin += 2;
}
} else {
begin += 4;
}
int end = -1;
if ((end = signed.indexOf("\r\n-----", begin)) < 0) {
if ((end = signed.indexOf("\n-----", begin)) < 0) {
return signed;
}
}
if (end <= begin) {
return signed;
}
return signed.substring(begin, end);
}
public Provider getProvider() {
if (bcProvider == null) {
bcProvider = new BouncyCastleProvider();
}
return bcProvider;
}
/**
* @return the myKey
*/
public String getMyKey() {
return myKey;
}
/**
* @param myKey the myKey to set
*/
public void setMyKey(String myKey) {
this.myKey = myKey;
}
/**
* @return the myKeyPw
*/
public String getMyKeyPw() {
return myKeyPw;
}
/**
* @param myKeyPw the myKeyPw to set
*/
public void setMyKeyPw(String myKeyPw) {
this.myKeyPw = myKeyPw;
}
/**
* @return the keyStorage
*/
public Map<String, String> getKeyStorage() {
return keyStorage;
}
}